package top.heathylife.gateway.common.po;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import org.springframework.format.annotation.DateTimeFormat;

import java.io.Serializable;
import java.time.LocalDateTime;

/**
 * 接口调用的记录
 * @author GaoZexi
 */
@Data
@Builder
@Accessors(chain = true)
@TableName("gateway_log")
@ApiModel("网关调用日志")
@NoArgsConstructor
@AllArgsConstructor
public class GatewayLogPo implements Serializable {
    private static final long serialVersionUID = 1L;


    @ApiModelProperty("主键")
    @TableId(type = IdType.ASSIGN_UUID)
    String id;

    @ApiModelProperty("MD5值,查询条件+接口名称+秘钥的MD5加密串")
    String md5;
    @ApiModelProperty("接口名称")
    String apiName;
    @ApiModelProperty("本次访问使用的秘钥")
    String secret;

    @ApiModelProperty("数据源简称")
    String shortName;
    /**
     * 获取应用名称
     * 内部调用时:应用名称不用填写
     * 直接在配置文件中获取 spring.application.name的值进行填充，为了方便restTemplate远程调用
     * 外部调用:直接取请求头 applicationName
     */
    @ApiModelProperty("应用名,数据库限制长度50")
    String applicationName;
    /**
     * 创建时间
     */
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    LocalDateTime createTime;
    /**
     * 完成时间
     */
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    LocalDateTime finishTime;
    /**
     * 是否命中缓存
     */
    Boolean hitCache;
    /**
     * 请求数据数据集
     */
    String requestData;
    /**
     * 数据源处理后的三方数据返回结果
     */
    String returnData;

    /**
     * 三方响应的元数据
     */
    String originData;

    /**
     * 请求三方的元数据
     */
    @TableField(exist = false)
    String originReqData;
    /**
     * 调用方ip
     */
    String ip;
    /**
     * 接口的返回数据是否正常
     */
    Boolean status;
    /**
     * 错误信息
     */
    String errorMsg;

    /**
     * 业务失败后此流水号不变、如果是走缓存，流水号也会存在
     */
    Long groupNo;
    /**
     * 流水号编号、如果是走缓存，流水号为空
     */
    Long no;


    /**
     * 本次请求的可以接受的接口时效性 是接口传入 还是网关预置(A),还是走的是网关默认(B)
     */
    String periodValidity;
}
